﻿using System;
using Onshi.POS.Comun.Vistas;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Repositorios;

namespace Onshi.POS.Comun
{
    public class TelefonosAltaModificacionPresentador
    {
        #region Constructores

        public TelefonosAltaModificacionPresentador(ITelefonosAltaModificacion vista)
            : base()
        {
            this.vista = vista;
        }

        #endregion

        #region Atributos

        private ITelefonosAltaModificacion vista;

        #endregion

        #region Propiedades

        public RepositorioTipoTelefono RepositorioTipoTelefono
        {
            get { return new RepositorioTipoTelefono(); }
        }

        #endregion

        #region Metodos

        public void Aceptar()
        {
            var tipo = RepositorioTipoTelefono.DevolverPorId(vista.IdTipoTelefono);
            if (tipo == null)
                throw new Exception("El tipo de teléfono no existe");
            if (vista.CodigoArea == String.Empty)
                throw new Exception("El código de área no puede quedar vacia");
            Int32 codigoArea;
            if (!Int32.TryParse(vista.CodigoArea.Trim(), out codigoArea))
                throw new Exception("El código de área debe ser numérico");
            if (vista.Numero == String.Empty)
                throw new Exception("El número no puede quedar vacio");
            Int32 numero;
            if (!Int32.TryParse(vista.Numero.Trim(), out numero))
                throw new Exception("El número debe ser numérico");
            switch (vista.TipoTelefono)
            {
                case EnumTipoEntidad.TELEFONO_VENDEDOR:
                    var telefonoVendedor = new TelefonoVendedor();
                    telefonoVendedor.Tipo = tipo;
                    telefonoVendedor.CodigoArea = vista.CodigoArea.Trim();
                    telefonoVendedor.Numero = vista.Numero.Trim();
                    telefonoVendedor.Observacion = vista.Observacion.Trim();
                    vista.Telefono = telefonoVendedor;
                    break;
                case EnumTipoEntidad.TELEFONO_PROVEEDOR:
                    var telefonoProveedor = new TelefonoProveedor();
                    telefonoProveedor.Tipo = tipo;
                    telefonoProveedor.CodigoArea = vista.CodigoArea.Trim();
                    telefonoProveedor.Numero = vista.Numero.Trim();
                    telefonoProveedor.Observacion = vista.Observacion.Trim();
                    vista.Telefono = telefonoProveedor;
                    break;
                case EnumTipoEntidad.TELEFONO_CLIENTE:
                    var telefonoCliente = new TelefonoCliente();
                    telefonoCliente.Tipo = tipo;
                    telefonoCliente.CodigoArea = vista.CodigoArea.Trim();
                    telefonoCliente.Numero = vista.Numero.Trim();
                    telefonoCliente.Observacion = vista.Observacion.Trim();
                    vista.Telefono = telefonoCliente;
                    break;
            }
        }

        public void Inicializar()
        {
            if (vista.EstadoABM == EnumEstadoAltaBajaModificacionHabilitacion.MODIFICACION)
            {
                if (RepositorioTipoTelefono.DevolverPorId(vista.IdTipoTelefono) == null)
                    throw new Exception("El tipo de teléfono no existe");
                vista.IdTipoTelefono = vista.IdTipoTelefono;
                vista.CodigoArea = vista.CodigoArea.Trim();
                vista.Numero = vista.Numero.Trim();
                vista.Observacion = vista.Observacion.Trim();
            }
        }

        #endregion
    }
}
